#ifndef SURFACESHADER
#define SURFACESHADER

#include "Vector3.h"
#include "Material.h"
#include "Ray.h"
#include "LightSource.h"
#include <vector>
class SurfaceObject;
class RenderingSystem;

class SurfaceShader {
    public:
        virtual  Vector3 Shade(Material &_Material,
                            Ray &_EyeRay,
                            Vector3 &_HitLocation,
                            SurfaceObject &_Object,
                            vector<LightSource*> &_ListOfLightSources,
                            RenderingSystem &_RenderingSystem)  = 0;
        ~SurfaceShader() {;}
        virtual bool Validate() = 0;
        Vector3 _ColorOut;
    protected:
       virtual void InternalShade(Material &_Material,
                            Ray &_EyeRay,
                            Vector3 &_HitLocation,
                            SurfaceObject &_Object,
                            vector<LightSource*> &_ListOfLightSources,
                            RenderingSystem &_RenderingSystem) = 0;
};

#endif
